//
//  LSZUserAccountViewModel.swift
//  醒浪微博
//
//  Created by 雷顺哲 on 16/7/12.
//  Copyright © 2016年 LSZ. All rights reserved.
//

import UIKit

class LSZUserAccountViewModel: NSObject {
//    使用单例
    static let sharedUserAccount: LSZUserAccountViewModel = LSZUserAccountViewModel()
    
//    持有用户对象
    var userAccount: LSZUserAccount? {
//        解档对象,获取路径
        return LSZUserAccount.loadUserAccount()
    }
//    建立私有构造函数
    private override init () {
        super.init()
    }
    
//    判断是否登录
    var isLogin: Bool {
        return accessToken != nil
    }
    /*
    通过只读计算属性判断
    1.判断accessToken为nil，直接表示没有登录
    2.判断accessToken不为nil
    - 判断accesstoken是否过期，不过期表示登录，过去表示未登录
    
    */
    var accessToken: String? {
        let token = userAccount?.access_token
        if token == nil {
//            表示未登录
            return nil
        } else {
//            判断值是否过期
            let result = userAccount?.expiresDate?.compare(NSDate())
             //  如果过去时间大于当前时间表示accesstoken没有过期
            if result == NSComparisonResult.OrderedDescending {
                return token
            } else {
                return nil
            }
            
        }
    }
    
    
    
    
    // MARK: 通过授权码(code)获取accesstoken
    
    func requestAccesstoken(code: String, callBack: (isSuccess: Bool)-> ()){
        
        LSZNetworkTools.sharedToos.requestAccesstoken(code) { (response, error) -> () in
            //          如果error不为空说明请求不成功
            if error != nil {
                callBack(isSuccess: false)
                return
            }
            
            //            代码执行到这里,成功的回调
            guard let dic = response as? [String: AnyObject] else {
                print("不是正确格式的json")
                callBack(isSuccess: false)
                return
            }
            
            //            代码执行到这里说明dic有值,并且是符合要求的字典类型
            let userAccount = LSZUserAccount(dic: dic)
            
            
            self.requestUserInfo(userAccount , callBack: callBack)
        }
    }
    
    
    
    //    获取用户信息
    private func requestUserInfo(userAccount: LSZUserAccount, callBack: (isSuccess: Bool)->()) {
        
        LSZNetworkTools.sharedToos.requestUserInfo(userAccount) { (response, error) -> () in
            if error != nil {
                callBack(isSuccess: false)
                return
            }
            guard let dic = response as? [String: AnyObject] else {
                callBack(isSuccess: false)
                return
            }
            
            let name = dic["name"]
            let avatar_large = dic["avatar_large"]
            
            //            设置用户名和头像
            userAccount.name = name as? String
            userAccount.avatar_large = avatar_large as? String
            
            //            保存用户对象
           let result = userAccount.saveUserAccount()
            if result {
                callBack(isSuccess: true)
            }else {
                callBack(isSuccess: false)
            }
        }
    }
   
    
    
    
    
    

    
    
    
    
    
}
